 1.Impala概述
   
   Impala是Cloudera提供的⼀一款开源的针对HDFS和HBASE中的PB级别数据进⾏行行交互式实时查询(Impala
速度快)，Impala是参照⾕谷歌的新三篇论⽂文当中的Dremel实现⽽而来，其中旧三篇论⽂文分别是
（BigTable，GFS，MapReduce）分别对应我们即将学的HBase和已经学过的HDFS以及MapReduce。
   Impala最大卖点和最大特点就是快速，Impala中文翻译是高角羚羊。
 
 2.Impala优势
   
   回顾前面大数据课程路路线其实就是⼀一个⼤大数据从业者⾯面对的⼤大数据相关技术发展的过程，
   技术发展以及更更新换代的原因就是⽼老老的技术架构遇到新的问题，有些问题可以通过不不断优化代码优
化设计得以解决，有⼀一些问题就不不再是简简单单修改代码就能解决，需要从框架本身架构设计上改
变，以⾄至于需要推到重建。
   在⼤大数据领域主要解决的问题是数据的存储和分析，但是其实⼀一个完整的⼤大数据分析任务如果细分
会有⾮非常多具体的场景，⾮非常多的环节；并没有⼀一个类似Java Web的Spring框架实现⼤大⼀一统的局
⾯面。
   ⽐比如我们按照阶段划分⼀一个⼤大数据开发任务，会有：数据采集(⽇日志⽂文件，关系型数据库中)，数据清洗
(数据格式整理理，脏数据过滤等)，数据预处理理(为了了后续分析所做的⼯工作)，数据分析：离线处理理(T+1分
析)，实时处理理(数据到来即分析)，数据可视化，机器器学习，深度学习等
   ⾯面对如此众多的阶段再加上⼤大数据天⽣生的⼤大数据量量问题没有任何⼀一个框架可以完美cover以上每个阶
段。所以⼤大数据领域有⾮非常多框架，每个框架都有最适合⾃自⼰己的具体场景。⽐比如：HDFS负责⼤大数据量量
存储，MapReduce（Hive）负责⼤大数据量量的分析计算，
 
 3.Impala的诞⽣生
   
   之前学习的Hive以及MR适合离线批处理理，但是对交互式查询的场景⽆无能为⼒力力(要求快速响应)，所以为了了
解决查询速度的问题，Cloudera公司依据Google的Dremel开发了了Impala,Impala抛弃了了MapReduce
使⽤用了了类似于传统的MPP数据库技术，⼤大⼤大提⾼高了了查询的速度。
 
 4.MPP是什什么？
   
   MPP (Massively Parallel Processing)，就是⼤大规模并⾏行行处理理，在MPP集群中，每个节点资源都是独⽴立
享有也就是有独⽴立的磁盘和内存，每个节点通过⽹网络互相连接，彼此协同计算，作为整体提供数据服
务。
   简单来说，MPP是将任务并⾏行行的分散到多个服务器器和节点上，在每个节点上计算完成后，将各⾃自部分的
结果汇总在⼀一起得到最终的结果
   对于MPP架构的软件来说聚合操作⽐比如计算某张表的总条数，则先进⾏行行局部聚合(每个节点并⾏行行计算)，
然后把局部汇总结果进⾏行行全局聚合(与Hadoop相似)。
 
 5.Impala与Hive对⽐比
   
   Impala的技术优势
   1).Impala没有采取MapReduce作为计算引擎，MR是⾮非常好的分布式并⾏行行计算框架，但MR引擎更更多
的是⾯面向批处理理模式，⽽而不不是⾯面向交互式的SQL执⾏行行。与 Hive相⽐比：Impala把整个查询任务转为
⼀一棵执⾏行行计划树，⽽而不不是⼀一连串串的MR任务，在分发执⾏行行计划后，Impala使⽤用拉取的⽅方式获取上个
阶段的执⾏行行结果，把结果数据、按执⾏行行树流式传递汇集，减少的了了把中间结果写⼊入磁盘的步骤，再
从磁盘读取数据的开销。Impala使⽤用服务的⽅方式避免 每次执⾏行行查询都需要启动的开销，即相⽐比
Hive没了了MR启动时间。
   2).使⽤用LLVM(C++编写的编译器器)产⽣生运⾏行行代码，针对特定查询⽣生成特定代码。
   3).优秀的IO调度，Impala⽀支持直接数据块读取和本地代码计算。
   4).选择适合的数据存储格式可以得到最好的性能（Impala⽀支持多种存储格式）。
   5).尽可能使⽤用内存，中间结果不不写磁盘，及时通过⽹网络以stream的⽅方式传递。
   Impala与Hive对⽐比分析
   1).查询过程
   Hive：在Hive中，每个查询都有⼀一个“冷启动”的常⻅见问题。（map,reduce每次都要启动关闭，申
请资源，释放资源。。。）
   Impala：Impala避免了了任何可能的启动开销，这是⼀一种本地查询语⾔言。 因为要始终处理理查询，则
Impala守护程序进程总是在集群启动之后就准备就绪。守护进程在集群启动之后可以接收查询任
务并执⾏行行查询任务。
   2).中间结果
   Hive：Hive通过MR引擎实现所有中间结果，中间结果需要落盘，这对降低数据处理理速度有不不利利影响。
   Impala：在执⾏行行程序之间使⽤用流的⽅方式传输中间结果，避免数据落盘。尽可能使⽤用内存避免磁盘开销
   3).交互查询
   Hive：对于交互式计算，Hive不不是理理想的选择。
   Impala：对于交互式计算，Impala⾮非常适合。(数据量量级PB级)
   4).计算引擎
   Hive：是基于批处理理的Hadoop MapReduce
   Impala：更更像是MPP数据库
   5).容错
   Hive：Hive是容错的（通过MR&Yarn实现）
   Impala：Impala没有容错，由于良好的查询性能，Impala遇到错误会重新执⾏行行⼀一次查询
   6).查询速度
   Impala：Impala⽐比Hive快3-90倍。
 
 6.Impala优势总结
   
   1).Impala最⼤大优点就是查询速度快，在⼀一定数据量量下；
   2).速度快的原因：避免了了MR引擎的弊端，采⽤用了了MPP数据库技术，
 
 7.Impala的缺点
   
   1).Impala属于MPP架构，只能做到百节点级，⼀一般并发查询个数达到20左右时，整个系统的吞吐已
经达到满负荷状态，在扩容节点也提升不不了了吞吐量量，处理理数据量量在PB级别最佳。
   2).资源不不能通过YARN统⼀一资源管理理调度，所以Hadoop集群⽆无法实现Impala、Spark、Hive等组件
的动态资源共享。
 
 8.适用场景
   
   Hive: 复杂的批处理理查询任务，数据转换任务，对实时性要求不不⾼高同时数据量量⼜又很⼤大的场景。
   Impala：实时数据分析，与Hive配合使⽤用,对Hive的结果数据集进⾏行行实时分析。impala不不能完全取代
hive，impala可以直接处理理hive表中的数据。